#pragma once

// The data consists of following source file objects:
//
//  struct Foo1 {
//    int  a;
//    char b;
//    long c;
//  };
//
//  struct Foo2 {
//    int         a;
//    union {
//      struct Foo1 f;
//      struct {
//        char      g;
//      };
//    };
//  };
//
//  struct Foo3 {
//    struct Foo1 *foo1;
//    const volatile struct Foo2 * restrict foo2;
//  };
//
//  struct Foo3 foo3;
//
//  struct Foo3 *func_1(int a, struct Foo1 *foo1, struct Foo2 *foo2)
//  {
//    return 0;
//  }
//
//  struct Foo3 *func_2(int a, int b, struct Foo1 *foo1)
//  {
//    return 0;
//  }
//
//  struct Foo3 *func_3(int a, int b, struct Foo1 *foo1)
//  {
//    return 0;
//  }
//
// int main(void)
// {
//   func_1(0, 0, 0);
//   return 0;
// }

// generated by:
//  % cat a.c
//  [... the above definitions ...]
//  struct Foo3 f3;
//  % clang -target bpf -g -c a.c
//  % llvm-objcopy --dump-section .BTF=a.btf a.o
//  % hexdump -ve '13/1 "0x%02x, " "\n"' a.btf
//
//  or by:
//
//  $ cat a.c
//  [... the above definitions ...]
//  $ gcc -o btf -g btf.c
//  $ pahole -J btf   # v1.17 and higher
//  $ objcopy --dump-section .BTF=data btf
//  $ xxd -i data > data.h

unsigned char btf_data[] = {
  0x9f, 0xeb, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc,
  0x01, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00,
  0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
  0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
  0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04,
  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x16, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
  0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x40,
  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00,
  0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x10, 0x00, 0x00, 0x00,
  0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
  0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
  0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x06, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x0a, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x09, 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
  0x04, 0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x40,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0c, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x03, 0x00, 0x00, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02,
  0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00,
  0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x0c, 0x12, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
  0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0d, 0x0e,
  0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1d, 0x00,
  0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
  0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x15, 0x00, 0x00, 0x00,
  0x00, 0x46, 0x6f, 0x6f, 0x31, 0x00, 0x46, 0x6f, 0x6f, 0x32, 0x00, 0x46, 0x6f,
  0x6f, 0x33, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x63, 0x68, 0x61, 0x72,
  0x00, 0x66, 0x00, 0x66, 0x6f, 0x6f, 0x31, 0x00, 0x66, 0x6f, 0x6f, 0x32, 0x00,
  0x66, 0x75, 0x6e, 0x63, 0x5f, 0x31, 0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x32,
  0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x33, 0x00, 0x67, 0x00, 0x69, 0x6e, 0x74,
  0x00, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x74, 0x00, 0x6d, 0x61, 0x69,
  0x6e, 0x00
};

unsigned int btf_data_len = sizeof(btf_data) / sizeof(btf_data[0]);

// List of functions from the above data
unsigned char func_list[] = "func_1\n"
                            "func_2\n"
                            "func_3\n";

unsigned int func_list_len = sizeof(func_list) / sizeof(func_list[0]);
